home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / extra / mysupp.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  2KB  |  81 lines

  1. /*  VERY SIMPLE stub-routines to emulate some unix-io   */
  2.  
  3. #include <clib/dos_protos.h>
  4.  
  5.  
  6. #define MAX_FILES 50
  7.  
  8. extern BPTR _stdin,_stdout,_stderr;
  9.  
  10. static BPTR descr[MAX_FILES];
  11. static char dupped[MAX_FILES];
  12.  
  13. static _close_added;
  14.  
  15. static void _close_all(void)
  16. /*  closes files; will be called at exit    */
  17. {
  18.     int i;BPTR p;
  19.     for(i=0;i<MAX_FILES;i++){
  20.         p=descr[i];
  21.         if(!dupped[i]&&p&&p!=_stdin&&p!=_stdout&&p!=_stderr)
  22.             close(i);
  23.     }
  24. }
  25. int open(char *name,int bla)
  26. {
  27.     int d;
  28.     if(!_close_added){
  29.         if(atexit(_close_all)) return(-1);
  30.         _close_added=1;
  31.     }
  32.     d=3;
  33.     while(d<MAX_FILES&&descr[d]) d++;
  34.     if(d<MAX_FILES&&(descr[d]=Open(name,MODE_OLDFILE))) return(d);
  35.         else return(-1);
  36. }
  37. int creat(char *name,int bla)
  38. {
  39.     int d;
  40.     if(!_close_added){
  41.         if(atexit(_close_all)) return(-1);
  42.         _close_added=1;
  43.     }
  44.     d=3;
  45.     while(d<MAX_FILES&&descr[d]) d++;
  46.     if(d<MAX_FILES&&(descr[d]=Open(name,MODE_NEWFILE))) return(d);
  47.         else return(-1);
  48. }
  49. void close(int d)
  50. {
  51.     if(d<MAX_FILES&&descr[d]){
  52.         if(dupped[d]) dupped[d]=0;
  53.             else      Close(descr[d]);
  54.         descr[d]=0;
  55.     }
  56. }
  57. int read(int d,char *buf,long l)
  58. {
  59.     if(!descr[0]) descr[0]=_stdin;
  60.     if(!descr[1]) descr[1]=_stdout;
  61.     if(!descr[2]) descr[2]=_stderr;
  62.     return Read(descr[d],buf,l);
  63. }
  64. int write(int d,char *buf,long l)
  65. {
  66.     if(!descr[0]) descr[0]=_stdin;
  67.     if(!descr[1]) descr[1]=_stdout;
  68.     if(!descr[2]) descr[2]=_stderr;
  69.     return Write(descr[d],buf,l);
  70. }
  71. int dup2(int old,int new)
  72. {
  73.     if(!descr[0]) descr[0]=_stdin;
  74.     if(!descr[1]) descr[1]=_stdout;
  75.     if(!descr[2]) descr[2]=_stderr;
  76.     descr[new]=descr[old];
  77.     dupped[new]=1;
  78.     return(0);
  79. }
  80.  
  81.